// 哈希函数
// 1. 性能高的哈希函数应具备以下两个优点
// - 快速的计算
// - 均匀的分布

const PRIME = 31; // 自己采用的一个质数（无强制要求，质数即可）
/**
 *
 * @param {string} str：哈希表的要存储的数据的key
 * @param {number} limit：哈希表的容量
 * @returns {number} key的hash值
 */
const hashCode = (key, limit = 7) => {
  let hashCode = 0,
    str = String(key);

  // 使用霍纳法则（秦九韶算法），计算 hashCode 的值
  for (let i = 0; i < str.length; i++) {
    hashCode = PRIME * hashCode + str.charCodeAt(i);
  }
  hashCode = hashCode % limit;

  return hashCode;
};

export default hashCode;
